/**
 * 
 */
package com.huawei.classroom.student.h53;

import java.io.IOException;
import java.util.ConcurrentModificationException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;


/**
 * @author Administrator
 *
 */
public class RabbitCount {

	/**
	 * 1对兔子出生以后经过180天可以生出一窝（2对）兔子，以后每隔90天繁殖一次生出一窝（2对）兔子
	 * 每对兔子的寿命是700天 
	 * @param startCount 第0天 开始的时候初生的兔子对数
	 * @param months 经过的天份数
	 * @return 目前系统中存活的兔子的对数
	 */
	public int getLivingRabbit(int startCount,int days) {
		Set<Rabbits> set = new HashSet<>();//存兔子对的
		Set<Rabbits> add_set = new HashSet<>();//存新生的兔子对
		set.add(new Rabbits(startCount, 0));
		int i;
		Iterator<Rabbits> it;
		Iterator<Rabbits> add_it;
		for(i = 1; i * 90 <= days; i++) {
			it = set.iterator();
			while(it.hasNext()) {
				Rabbits s = it.next();
				if(s.day + 90 > 700) {//加等号也行，加就到700天准时挂，不加就10天后挂
					it.remove();//不能在遍历时对set直接修改，得用索引的函数来删除死去的兔子
				}else if(s.day + 90 >= 180 && s.day + 90 < 700){
					s.day += 90;
					add_set.add(new Rabbits(2*s.num, 0));//同理，不能直接add，只能先存在其他地方
				}else
					s.day += 90;
			}
			add_it = add_set.iterator();
			while(add_it.hasNext()) {
				Rabbits s = add_it.next();
				set.add(s);//把新生兔子加进来
				add_it.remove();//保持每次都是空Set
			}
		}
		i--;
		i = i * 90;
		if(i < days) {
			i = i + 10;//记得不能直接从i = i * 90开始，这样会多算10天
			for( ; i<=days; i=i+10) {
				it = set.iterator();
				while(it.hasNext()) {//后面不到90天所以不会有新兔子生成
					Rabbits s = it.next();
					if(s.day + 10 > 700) {
						it.remove();
					}else
						s.day += 10;
				}
			}
		}
		
		int sum = 0;
		it = set.iterator();
		while(it.hasNext()) {
			Rabbits s = it.next();
			sum = sum + s.num;
		}
		//System.out.println(sum);
		return sum;
	}
}
